package de.bht.netviz.ipsaver.lookup.dao;

import de.bht.netviz.dao.exceptions.NonexistentEntityException;
import de.bht.netviz.ipsaver.lookup.model.ILookupData;

/**
 * Oberinterface für JPA Controller verschiedener IP-Locator Services.
 * 
 * @author Marius Hentschel
 * @since  2012/11/05
 */
public interface ILookupServiceJpaController {

   /**
    * Erstellt ein neues Objekt in der Datenbank.
    */
   public void create(ILookupData lookupData);
   
   /**
    * Löscht ein Objekt in der DB.
    * 
    * @param id
    *    die ID des zu löschenden Objekts.
    * @throws NonexistentEntityException 
    */
   void destroy(long id) throws NonexistentEntityException;

   /**
    * Ändert ein Objekt in der Datenbank.
    * 
    * @param data
    *    das zu ändernde Objekt
    * @throws NonexistentEntityException
    * @throws Exception 
    */
   void edit(ILookupData data) throws NonexistentEntityException, Exception;

   /**
    * Sucht anhand einer ID ein LookupData Element in der DB.
    * 
    * @param id
    *    die ID des gesuchten Elements
    * @return 
    *    das gesuchte Element oder NULL, falls nicht gefunden
    */
   ILookupData findLookupData(long id);

   /**
    * Liefert die Anzahl der in der DB gespeicherten Elemente zurück.
    * 
    * @return 
    *    Anzahl der in der DB vorhandenen Elemente.
    */
   int getLookupDataCount();
   
   /**
    * Gibt ein Objekt anhand seiner IP Adresse zurück.
    * 
    * @param ip
    *    Die IP-Adresse zu der Locator Daten gesucht werden
    * @return 
    *    das gesuchte Objekt oder NULL, falls keins gefunden wurde.
    */
   ILookupData findByIp( String ip );
}
